/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jumpto;

import Conexao.ConexaoDB;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author fosa
 */
public class JumpToDb {

    int nummusicas;
    JumpToView view;
    private ConexaoDB dbCon;
    private Object[][] resultData;
    private Object[] resultColuna;
    private File rootMusicas = new File("/media/arquivos/Meus Documentos/Minhas músicas/");
    private String[] extencao = new String[]{".mp3", ".ogg", ".mp4", ".wav", ".wma"};
    private char[] separador = new char[]{'-'};
    FileFilter musica = new FileFilter() {

        @Override
        public boolean accept(File f) {
            if (f.isFile()) {
                for (int i = 0; i < getExtencao().length; i++) {
                    if (f.getName().substring(f.getName().length() - 4).equals(getExtencao()[i])) {
                        return true;
                    }
                }
                return false;
            } else {
                return f.isDirectory();
            }
        }
    };

    public JumpToDb() {
    }

    public JumpToDb(ConexaoDB _dbCon) {
        this.dbCon = _dbCon;
    }

    public JumpToDb(ConexaoDB _dbCon, File configfile, JumpToView _jump) {
        this.dbCon = _dbCon;
        view = _jump;


        FileReader reader = null;
        BufferedReader read = null;
        try {
            reader = new FileReader(configfile);
            read = new BufferedReader(reader);

            String linha;
            while (read.ready()) {
                linha = read.readLine();

                if (linha.contains("biblioteca=")) {
                    setRootMusicas(new File(linha.substring("biblioteca=".length())));
                } else if (linha.contains("extencao=")) {
                    linha = linha.substring("extencao=".length());
                    String[] str = linha.split(", ");
                    setExtencao(str);
                }
            }
        } catch (FileNotFoundException ex) {
            setRootMusicas(new File(System.getProperty("user.home")));
            setExtencao(new String[]{".mp3", ".ogg", ".mp4", ".wav", ".wma"});
        } catch (IOException ex) {
            Logger.getLogger(JumpToDb.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public boolean procurarMusica(String _sql) {
        boolean ret = true;
        try {
            Object[][][] resultado = getDbCon().consulta("select artista,nome,arquivo from biblioteca " + _sql);
            setResultData(resultado[1]);
            setResultColuna(resultado[0][0]);
        } catch (Exception ex) {
            ret = false;
        }
        return ret;
    }

    public boolean inserirMusica(String _campos, String _valores) {
        boolean ret = true;
        try {
            getDbCon().Inserir("INSERT INTO `musicas`.`biblioteca` (" + _campos + ") VALUES (" + _valores + ")");
        } catch (Exception ex) {
            ret = false;
        }
        return ret;
    }

    public boolean atualizarBiblioteca() {
        boolean ret = true;
        try {
            verificar(getRootMusicas());
        } catch (Exception ex) {
            ret = false;
        }
        return ret;
    }

    void verificar(File root) {
        if (root.canRead()) {
            if (root.isDirectory()) {
                File[] arquivos = root.listFiles(musica);
                for (int i = 0; i < arquivos.length; i++) {
                    verificar(arquivos[i]);
                }
            } else {
                nummusicas += 1;

                view.setTexto(root.getName() + " numero de musicas: " + nummusicas);


                System.out.println(root.getName());
                String arquivo = root.getName().replace("\'", "''");
                String Artista = "";
                String Nome = "";
                int lenght = arquivo.length();
                int index = 0;
                for (int i = 0; i < lenght; i++) {
                    if (arquivo.charAt(i) == getSeparador()[0]) {
                        index = i;
                        break;
                    }
                }
                if (index > 0) {
                    Artista = arquivo.substring(0, index);
                    Nome = arquivo.substring(index + 1, lenght);
                } else {
                    Nome = arquivo;
                }

                String valores = " null, '" + Nome + "', '" + Artista + "', 'file://" + root.getPath().replace("\'", "''") + "'";
                String campos = "`id` ,`nome` ,`artista` ,`arquivo`";
                inserirMusica(campos, valores);
            }
        }
    }

    /**
     * @return the dbCon
     */
    public ConexaoDB getDbCon() {
        return dbCon;
    }

    /**
     * @param aDbCon the dbCon to set
     */
    public void setDbCon(ConexaoDB aDbCon) {
        dbCon = aDbCon;
    }

    /**
     * @return the resultData
     */
    public Object[][] getResultData() {
        return resultData;
    }

    /**
     * @param aResultData the resultData to set
     */
    public void setResultData(Object[][] aResultData) {
        resultData = aResultData;
    }

    /**
     * @return the resultColuna
     */
    public Object[] getResultColuna() {
        return resultColuna;
    }

    /**
     * @param aResultColuna the resultColuna to set
     */
    public void setResultColuna(Object[] aResultColuna) {
        resultColuna = aResultColuna;
    }

    /**
     * @return the rootMusicas
     */
    public File getRootMusicas() {
        return rootMusicas;
    }

    /**
     * @param rootMusicas the rootMusicas to set
     */
    public void setRootMusicas(File rootMusicas) {
        this.rootMusicas = rootMusicas;
    }

    /**
     * @return the separador
     */
    public char[] getSeparador() {
        return separador;
    }

    /**
     * @param separador the separador to set
     */
    public void setSeparador(char[] separador) {
        this.separador = separador;
    }

    /**
     * @return the extencao
     */
    public String[] getExtencao() {
        return extencao;
    }

    public String getExtencaoS() {
        String ret = "";
        for (int i = 0; i < extencao.length; i++) {
            if (i > 0) {
                ret += ", ";
            }
            ret += extencao[i];
        }
        return ret;
    }

    /**
     * @param extencao the extencao to set
     */
    public void setExtencao(String[] extencao) {
        this.extencao = extencao;
    }
}
